#include "../include/Joueur.h"

#include "../include/Monde.h"

/** @brief (one liner)
  *
  * (documentation goes here)
  */
 Joueur::Joueur(Monde * m, int ID) : ressources(0,0,0)
 {
     this->m = m;
     this->ID = ID;
 }
 void Joueur::init( std::vector<CarracteristiquesEntite> ents, std::vector<CarracteristiquesElement> elts)
{
	for( int i=0; i<ents.size(); i++)
	{	
		entites_config.push_back(CarracteristiquesEntite(ents[i]));
	}
	for( int j=0; j<elts.size(); j++)
	{
		batiments_config.push_back(CarracteristiquesElement(elts[j]));
	}
}

 void  Joueur::setConditionsDepart( Ressource r)
 {
 	ressources =Ressource(r);
 }

void Joueur::getUniteConstructionFinie()
{
	if( batiments.size() > 0 )
	for( int i=0; i<batiments.size(); i++)
	{	
		Entite *e = batiments[i]->produire();
		if( e != NULL ) // Dans ce cas unité produite
		{	
			ajouterEntite(e);
		}
	}
}
int Joueur::getID() const
{
	return ID;
}

bool Joueur::peutConstruire( Element e)
{
    if( e.getCout() <= ressources )
    	return true;
}

void Joueur::construire( Batiment *b)
{
	if( peutConstruire(*b) && b->getPourcentageConstruction()==0 )
	{
		ajouterBatiment(b); 
	}
}
std::vector<Entite*> Joueur::getEntites()
{
	return entites;
}
std::vector<Batiment*> Joueur::getBatiments(){
	return batiments;
}
CarracteristiquesEntite* Joueur::getEntite_config(int i)
{
	if( i >= entites_config.size() )
		return NULL;

	return &(entites_config[i]);
}
CarracteristiquesElement* Joueur::getBatiment_config(int i)
{
	if( i >= batiments_config.size() )
		return NULL;

	return &(batiments_config[i]);
}
void Joueur::ajouterBatiment(Batiment *b)
{
	if( m->ajouterBatiment(b) == 0 )
		batiments.push_back(b);
}
void Joueur::ajouterEntite(Entite *e)
{
	if( m->ajouterEntite(e) == 0 )
		entites.push_back(e);
}
